package com.augurit.common.syscode.service;

import java.util.List;
import java.util.Map;

import org.springside.modules.orm.Page;

import com.augurit.common.entity.SysCodeType;
import com.augurit.common.syscode.web.form.SysCodeForm;

/**
 * 业务字典接口
 */
public interface ISysCodeService{
	/**
	 * 根据ID获取业务字典项Form对象
	 * @param id 业务字典项主键ID
	 * @return 业务字典项Form对象
	 */
	public SysCodeForm getItem(Long itemId);
	
	/**
	 * 根据ID获取业务字典类型Form对象
	 * @param typeId 业务字典类型主键ID
	 * @return 业务字典类型Form对象
	 */
	public SysCodeForm getType(Long typeId);
	
	/**
	 * 根据业务字典类型编号获取业务字典类型Form对象
	 * @param itemCode 业务字典类型编号
	 * @return 业务字典类型Form对象
	 */
	public SysCodeForm getType(String typeCode);

	public List<SysCodeForm> getItems(String typeCode);
	
	public List<SysCodeForm> getItems(String typeCode, Map<String, List<SysCodeForm>> sysCodeBuffer);
	
	/**
	 * 根据分页对象和Form对象进行分页条件查询
	 * @param page 分页对象
	 * @param form Form对象
	 * @return 分页查询结果.附带结果列表及所有查询时的参数
	 */
	public Page<SysCodeForm> searchItem(Page<SysCodeForm> page, SysCodeForm form);
	
	/**
	 * 根据分页对象和Form对象进行分页条件查询
	 * @param page 分页对象
	 * @param form Form对象
	 * @return 分页查询结果.附带结果列表及所有查询时的参数
	 */
	public Page<SysCodeForm> searchType(Page<SysCodeForm> page, SysCodeForm form);

	/**
	 * 保存业务字典项Form对象数组
	 * @param forms Form对象数组
	 */
	public void saveItem(List<SysCodeForm> forms);

	/**
	 * 保存业务字典类型Form对象数组
	 * @param forms Form对象数组
	 */
	public void saveType(List<SysCodeForm> forms);

	/**
	 * 根据主键ID集合删除子项对象
	 * @param itemIds 子项主键ID集合
	 * @return 被删除的子项所属的类型编号
	 */
	public List<String> deleteItem(Long... itemIds);
	
	/**
	 * 根据主键ID集合删除多个业务字典类型对象
	 * @param ids 业务字典类型主键ID集合
	 * @return 被删除的类型对象的类型编号列表
	 */
	public List<String> deleteType(Long... typeIds);
	
	/**
	 * 删除业务字典类型及所有业务字典项
	 * @param typeCode 业务字典类型编号
	 */
	public void deleteByTypeCode(String typeCode);
	
	/**
	 * 得到所有数据字典
	 * @return
	 * cuigeqiang
	 */
	public List<SysCodeType> getAllCodeType();
}
